package com.maozzi.common.util;

import com.maozzi.common.enums.BizCodeEnum;
import com.maozzi.common.exception.BizException;

import java.io.Serializable;
import java.util.Collection;
import java.util.Objects;

/**
 * 参数校验工具
 *
 * @author maozi
 */
public class ParamCheckUtil implements Serializable {

    /**
     * 检查字符串不为空
     *
     * @param param   待检查的字符串参数
     * @param message 自定义信息
     */
    public static void notBlank(String param, String message) {
        ParamCheckUtil.notBlank(param, BizCodeEnum.WRONG_PARAMETERS, message);
    }

    /**
     * 检查字符串不为空
     *
     * @param param    待检查的字符串参数
     * @param codeEnum 自定义错误码
     * @param message  自定义信息
     */
    public static void notBlank(String param, BizCodeEnum codeEnum, String message) {
        if (Objects.isNull(codeEnum)) {
            codeEnum = BizCodeEnum.WRONG_PARAMETERS;
        }
        if (Objects.isNull(message) || message.isBlank()) {
            message = codeEnum.getDescription();
        }
        if (Objects.isNull(param) || param.isBlank()) {
            throw new BizException(codeEnum, message);
        }
    }

    /**
     * 检查obj不为空
     *
     * @param param   待检查的字符串参数
     * @param message 自定义信息
     */
    public static void notNull(Object param, String message) {
        ParamCheckUtil.notNull(param, BizCodeEnum.WRONG_PARAMETERS, message);
    }

    /**
     * 检查obj不为空
     *
     * @param param    待检查的字符串参数
     * @param codeEnum 自定义错误码
     * @param message  自定义信息
     */
    public static void notNull(Object param, BizCodeEnum codeEnum, String message) {
        if (Objects.isNull(codeEnum)) {
            codeEnum = BizCodeEnum.WRONG_PARAMETERS;
        }
        if (Objects.isNull(message) || message.isBlank()) {
            message = codeEnum.getDescription();
        }
        if (Objects.isNull(param)) {
            throw new BizException(codeEnum, message);
        }

        if (param instanceof Collection<?> obj && obj.isEmpty()) {
            throw new BizException(codeEnum, message);
        }
    }

    /**
     * 检查真假语句是否为真
     *
     * @param param   待检查的字符串参数
     * @param message 自定义信息
     */
    public static void verify(boolean param, String message) {
        ParamCheckUtil.verify(param, BizCodeEnum.WRONG_PARAMETERS, message);
    }

    /**
     * 检查真假语句是否为真
     *
     * @param param    待检查的真假语句
     * @param codeEnum 自定义错误码
     * @param message  自定义信息
     */
    public static void verify(boolean param, BizCodeEnum codeEnum, String message) {
        if (Objects.isNull(codeEnum)) {
            codeEnum = BizCodeEnum.WRONG_PARAMETERS;
        }
        if (Objects.isNull(message) || message.isBlank()) {
            message = codeEnum.getDescription();
        }

        if (!param) {
            throw new BizException(codeEnum, message);
        }
    }
}
